package com.eling.elcms.travel.service.impl;

import com.eling.elcms.travel.model.RoomRegister;
import com.eling.elcms.travel.model.TravelContract;
import com.eling.elcms.travel.model.view.SettlementsResult;
import com.eling.elcms.travel.service.ISettlementsRule;
import com.eling.elcms.travel.util.DateHandlerUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * 份数床位费补贴规则
 * @author Lina
 * 规则 ：购买3份、5份、8份、10份的，分别对应给予每人每月100元、150元、200元、260元的床位费补贴
 * 		在发生业务的情况下才给补;
 * 		4份按3份算，其他依次类推;
 * 		不满一个月情况下不补。
 */
@Service
public class ShareBedSubsidyServiceImpl implements ISettlementsRule {
	
	
	private static final Log log = LogFactory.getLog(ShareBedSubsidyServiceImpl.class);

	@Override
	public SettlementsResult calculate(RoomRegister room, TravelContract contract, Date start, Date end) {
		log.debug("ShareBedSubsidyServiceImpl");
		
		SettlementsResult result = new SettlementsResult();
		// 获取顾客居住天数:结算日期 - 入住日期
		Integer days = DateHandlerUtil.daysOfTwoDate(start, end);
		
		// 计算抵扣次数，以30天为一个补贴单位，向下取整算出有多少个补贴单位
		result.setPiece(Math.floor(days/30));
		
		// 根据合同购买份数确定补贴金额
		Integer piece = contract.getNumber();
		if (piece >= 10){
			result.setMoney(260d * result.getPiece());
		}else if (piece >= 8){
			result.setMoney(200d * result.getPiece());
		}else if (piece >= 5){
			result.setMoney(150d * result.getPiece());
		}else if (piece >= 3){
			result.setMoney(100d * result.getPiece());
		}else{
			result.setMoney(0d);
		}

		return result;
	}
	
}
